# 1.函数的动态参数
# *args 动态位置参数 --- tuple
# **kwargs 动态关键字参数  --  dict

# 定义函数时括号中是聚合
# 使用和调用的时候是打散

# lst = [1,2,3,4,]
# *lst

# dic = {"key":1,"key2":2}
# **dic

# 参数优先级: 位置参数 > 动态位置参数 > 默认参数 > 动态关键字参数

# 2.函数的注释
"""
声明此函数的作用
"""
# 查看的函数的注释 函数名.__doc__
# 查看的函数的名字 函数名.__name__

# 3.名称空间
# 内置空间: pyhton解释器自带的方法存在内置空间
# 全局空间: 当前文件(.py)文件
# 局部空间: 函数体内的空间

# 加载顺序: 内置 > 全局 > 局部
# 取值顺序: 局部 > 全局 > 内置

# 作用域:
# 全局作用域:内置+全局
# 局部作用域:局部

# 4.函数的嵌套
# 1.不管在什么位置只要是函数名+()就是调用此函数

# def func(*args,**kwargs):
#     print(args,kwargs)
# func(12,1223,32,34,32,a=1,b=2)

# def a():
#     b()
#
# def b():
#     c()
#
# def c():
#     print(12)
#
# a()

# def func():
#     def foo():
#         a = 1
#         print(a)
#     return foo
# ret = func() # ret = foo函数的内存地址
# print(ret)

# 返回值返回给了函数的调用者
# 函数体中开辟的空间值多个函数是不能进行共用
# 函数在执行后自动销毁空间

# 5.global nonlocal
# global:只修改全局变量的值,在修改的地方留存变量
# nonlocal: 只修改局部,和全局没有任何关系,修改离它最近的,没有就向上一层进行查找修改.直到最外层的函数

# 其他:
# 三元运算符: 条件成立的结果 条件 条件不成立的结果
# 枚举: 自带序号 -- 获取的值是一个元组
